/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 文件名：	DataTable.java
 * 模块说明：	
 * 修改历史：
 * Jun 8, 2007 - zhangyanbo - 创建。
 */
package com.hd123.rumba.report;

import java.util.ArrayList;
import java.util.List;

/**
 * 表数据
 * <p>
 * 
 * 定义数据集包含的数据，支持嵌套数据集。
 * 
 * @author zhangyanbo
 * 
 */
public class TableData {

  private TableDef tableDef;
  private List<Object[]> records = new ArrayList<Object[]>();
  private Object[] buffer;

  public List<Object[]> getRecords() {
    return records;
  }

  private TableData() {
    super();
  }

  public TableData(TableDef tableDef) {
    super();
    this.tableDef = tableDef;
  }

  public void append() {
    buffer = new Object[tableDef.getFields().size()];
    for (int i = 0; i < tableDef.getFields().size(); i++)
      if (tableDef.getFields().get(i).getFieldType() == Field.NESTED)
        buffer[i] = new TableData(tableDef.getTableDef(tableDef.getFields().get(i).getName()));
  }

  public void write(String fieldName, Object data) throws Exception {
    if (buffer == null)
      throw new Exception("当前没有编辑任何一行，请先执行append。");
    buffer[tableDef.field2Index(fieldName).intValue()] = data;
  }

  public void post() {
    records.add(buffer);
    buffer = null;
  }

  public TableData getTableData(String fieldName) throws Exception {
    return (TableData) buffer[tableDef.field2Index(fieldName).intValue()];
  }

  public TableDef getTableDef() {
    return tableDef;
  }
}
